package com.ck.ips.dao;

import com.ck.common.model.DeviceStore;
import com.ck.ips.model.vo.DeviceProgramCountdownVO;
import com.ck.ips.model.vo.device.DeviceBasicInfoVO;
import com.ck.ips.model.vo.device.DeviceDetailVO;
import com.ck.ips.model.vo.device.DeviceGroupCountVO;
import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @Description: 设备mapper
 * @Author: hf
 * @Date: 2019/5/6 17:33
 * @Version: 1.0
 */
public interface DeviceMapper {


    /**
     * 根据节目版本号查询设备序列号
     *
     * @param programVersionList 节目版本号集合
     * @return 设备序列号集合
     */
    List<String> listDeviceCodeByProgramVersion(@Param("programVersionList") List<String> programVersionList);

    /**
     * 条件筛选获取设备基础信息
     *
     * @param groupIds             分组id
     * @param deviceName           终端名
     * @param deviceMac            mac地址
     * @param ip                   ip地址
     * @param deviceStatus         在线、离线状态
     * @param deviceSerialNum      终端序列号
     * @param deviceType           终端型号
     * @param resolvingPowers      终端分辨率
     * @param bindingStatus        绑定状态
     * @param screenSize           尺寸
     * @param belowSoftVersionCode 软件版本（低于该versionCode）
     * @param groupName            分组名
     * @param storeName            门店名
     * @param deviceCodeList
     * @return
     */
    Page<DeviceBasicInfoVO> listBasicDeviceInfoByPage(@Param("storeIds") List<String> storeIds, @Param("groupIds") List<String> groupIds, @Param("deviceName") String deviceName, @Param("deviceMac") String deviceMac,
                                                      @Param("ip") String ip, @Param("deviceStatus") String deviceStatus, @Param("deviceSerialNum") String deviceSerialNum,
                                                      @Param("deviceType") String deviceType, @Param("resolvingPowers") List<String> resolvingPowers, @Param("bindingStatus") Integer bindingStatus,
                                                      @Param("screenSize") String screenSize, @Param("belowSoftVersionCode") Integer belowSoftVersionCode, @Param("groupName") String groupName, @Param("storeName") String storeName,
                                                      @Param("deviceCodeList") List<String> deviceCodeList);

    /**
     * 获取设备详情
     *
     * @param deviceCode
     * @return
     */
    DeviceDetailVO getDetailByDeviceCode(@Param("deviceCode") String deviceCode);

    /**
     * 查询一组设备的分辨率（去重）
     *
     * @param deviceCodes
     * @param deviceGroupIdList
     * @return
     */
    List<String> getDistinctResolvingPowerByDeviceCodes(@Param("deviceCodes") List<String> deviceCodes,
                                                        @Param("deviceGroupIdList") List<String> deviceGroupIdList);

    /**
     * 修改终端信息
     *
     * @param deviceStore
     * @return
     */
    int updateDeviceDetail(DeviceStore deviceStore);

    /**
     * 终端解绑
     *
     * @param deviceCodeList
     */
    void untie(@Param("deviceCodeList") List<String> deviceCodeList, @Param("lastUntieBindingTime") Long lastUntieBindingTime);

    /**
     * 获取终端分组下的拥有设备数量
     *
     * @return
     */
    List<DeviceGroupCountVO> getDeviceCountByDeviceGroup();

    /**
     * 改变终端分组
     *
     * @param deviceGroupId
     * @param anotherDeviceGroupId
     */
    void changeDeviceGroupToAnother(@Param("deviceGroupId") Long deviceGroupId, @Param("anotherDeviceGroupId") Long anotherDeviceGroupId);

    /**
     * 获取播放队列的最晚下刊时间
     * @return
     */
    List<DeviceProgramCountdownVO> getDeviceProgramCountdown();

    /**
     * 查询今日新增终端序列号
     * @param todayStartTime
     * @return
     */
    List<String> listTodayNewDeviceCode(@Param("todayStartTime") Long todayStartTime);
}